PyVista 数据集

要在 VTK 或 PyVista 中可视化数据,需要两件信息:数据的几何形状,描述数据在空间中的位置及其值;以及其拓扑结构,描述数据集中点如何相互连接。

在顶层,我们有 vtkDataObject,它们只是没有几何或拓扑的“数据块”。它们包含 vtkFieldData 数组。其下是 vtkDataSet,它向 vtkDataObject 添加几何和拓扑。与数据集中的每个点或单元关联的是特定值。由于这些值必须在空间中定位和连接,它们保存在 vtkDataArray 类中,这些类只是堆上的内存缓冲区。在 PyVista 中,99% 的时间我们与 vtkDataSet 对象交互,而不是与 vtkDataObject 对象交互。PyVista 使用与 VTK 相同的数据类型,但以更 Python 化的方式构建它们以便于使用。

如果您想了解 VTK 如何构建其数据的一些背景,请参阅 Kitware 的 Python 中 VTK 简介,以及 Kitware GitHub 站点上的众多代码示例。Prof. Keenan Crane 在卡内基梅隆大学提供的离散微分几何 YouTube 系列 提供了与 VTK 中实现的一般 3D 建模相关的数学概念的极好介绍。这里教授的概念将帮助您理解为什么数据集在 VTK 等库中如此构建。

在最基础层面,所有 PyVista 几何类都继承自数据集类。数据集具有几何、拓扑以及描述该几何的属性,以点、单元或字段数组的形式。

PyVista 中的几何表示为点和单元。例如,考虑 PolyData 中的单个单元:

Document Image
\[\]

我们需要一种方法来描述这些点每个在空间中的位置,但我们在上面仅限于表达值本身(带有索引的数组列表)。VTK(因此 PyVista)有多个类表示不同的数据形状。最重要的数据集类如下所示:

Document Image
\[\]

这里,上述数据集从最复杂(5)到最简单(1)排序。也就是说,每个数据集都可以表示为 UnstructuredGrid,但 UnstructuredGrid 类需要最多的内存来存储,因为它们必须说明每个单独的点和单元。另一方面,由于 vtkImageData(ImageData)是均匀间隔的,几个整数和浮点数可以描述形状,因此它需要最少的内存来存储。

这是因为在 PolyData 或 UnstructuredGrid 中,点和单元必须显式定义。在其他数据类型中,如 ImageData,单元(甚至点)被定义为基于网格维度的涌现属性。

要实践这一点,让我们创建表示为 PolyData 的最简单表面。首先,我们需要定义我们的点。